package com.example.demo.util.imgUtil.IImgService.ImgServiceImpl;


import com.example.demo.exception.ServiceException;
import com.example.demo.util.imgUtil.IImgService.IFileImgService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

/**
 * <p>
 * 图片移动到正式 通用方法（公共项目）
 * </p>
 *
 */
@Service
public class FileImgServiceImpl implements IFileImgService {


    private static final Logger LOG = LoggerFactory.getLogger(FileImgServiceImpl.class);

    /**
     * 将图片从缓存移动到正式 半路径
     *
     * @param picture       图片缓存地址
     * @param photoFileName 图片正式存放文件夹名称
     * @return
     */
    @Override
    public String addImgofficialUpload(String picture, String photoFileName, HttpServletRequest request)throws ServiceException{
        // 提取出图片名称
        String img = picture.split(FileImgMessage.SUFFIX)[1];
        // 生成公共地址
        String fileString = (new File(request.getSession().getServletContext().getRealPath("/"))).getParent();
        System.out.println(fileString);
        File file = new File(fileString);
        System.out.println(file);
        // 生成缓存地址
        File oldFile = new File(file, picture);
        // 生成最终广告图片存放地址
        File newFile = new File(file + photoFileName, img);
        if (!newFile.getParentFile().getParentFile().exists()) {
            newFile.getParentFile().getParentFile().mkdir();
        }
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdir();
        }
        if (!newFile.exists()) {
            try {
                Path path1 = oldFile.toPath();
                Path path2 = newFile.toPath();
                Files.move(oldFile.toPath(), newFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
                if (newFile.exists()) {
                    boolean deleteFile = deleteFile(oldFile);
                    String URL = photoFileName + FileImgMessage.SUFFIX + img;
                    return URL;
                }
                throw new ServiceException("移动文件失败");
            } catch (Exception e) {
                e.printStackTrace();
                throw new ServiceException("未成功移动文件");
            }
        }
        throw new ServiceException("移动失败，未找到上传的文件");
    }

    /**
     * 删除文件
     *
     * @param file 文件地址
     * @return
     */
    private static boolean deleteFile(File file) {
        try {
            if (file.exists()) { // 这里判断文件是否存在
                file.delete();
                return true;
            } else {// 如果不存在
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }
}

interface FileImgMessage {
    //文件夹
    String SUFFIX = "/";
    //失败回传
    String RESULT_FAILED = "FAILED";
}
